package com.atguigu.lease.web.admin.service.impl;

import com.atguigu.lease.model.enums.BaseStatus;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.lease.model.entity.SystemPost;
import com.atguigu.lease.web.admin.service.SystemPostService;
import com.atguigu.lease.web.admin.mapper.SystemPostMapper;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author liubo
 * @description 针对表【system_post(岗位信息表)】的数据库操作Service实现
 * @createDate 2023-07-24 15:48:00
 */
@Service
public class SystemPostServiceImpl extends ServiceImpl<SystemPostMapper, SystemPost> implements SystemPostService {
    /**
     * 自定义分页查询岗位信息
     * 实现思路：
     * 1. 创建查询条件，只查询未删除的岗位
     * 2. 使用MP提供的分页功能进行查询
     */
    @Override
    public IPage<SystemPost> pageCustom(Page<SystemPost> page) {
        // 创建查询条件
        LambdaQueryWrapper<SystemPost> wrapper = new LambdaQueryWrapper<>();
        // 只查询未删除的岗位
        wrapper.eq(SystemPost::getIsDeleted, 0);
        // 返回分页结果
        return baseMapper.selectPage(page, wrapper);
    }

    /**
     * 自定义保存或更新岗位信息
     * 实现思路：
     * 1. 判断是新增还是修改
     * 2. 调用对应的方法进行操作
     */
    @Override
    public boolean saveOrUpdateCustom(SystemPost systemPost) {
        // 直接调用MP的方法即可，它会根据是否有id自动判断是新增还是更新
        return this.saveOrUpdate(systemPost);
    }

    /**
     * 自定义根据ID删除岗位
     * 实现思路：
     * 1. 使用软删除，更新is_deleted字段为1
     */
    @Override
    public boolean removeByIdCustom(Long id) {
        // 获取岗位信息
        SystemPost systemPost = baseMapper.selectById(id);
        if (systemPost == null) {
            return false;
        }
        // 设置为已删除
        systemPost.setIsDeleted((byte) 1);
        // 更新
        return baseMapper.updateById(systemPost) > 0;
    }

    /**
     * 自定义根据ID获取岗位信息
     * 实现思路：
     * 1. 根据ID查询
     * 2. 确保查询到的岗位未被删除
     */
    @Override
    public SystemPost getByIdCustom(Long id) {
        // 创建查询条件
        LambdaQueryWrapper<SystemPost> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SystemPost::getId, id);
        wrapper.eq(SystemPost::getIsDeleted, 0);
        // 查询并返回
        return baseMapper.selectOne(wrapper);
    }

    /**
     * 自定义获取所有岗位列表
     * 实现思路：
     * 1. 查询所有未删除的岗位
     * 2. 只返回正常状态的岗位
     */
    @Override
    public List<SystemPost> listCustom() {
        // 创建查询条件
        LambdaQueryWrapper<SystemPost> wrapper = new LambdaQueryWrapper<>();
        // 只查询未删除的且状态为正常的岗位
        wrapper.eq(SystemPost::getIsDeleted, 0);
        wrapper.eq(SystemPost::getStatus, BaseStatus.ENABLE);
        // 查询并返回
        return baseMapper.selectList(wrapper);
    }

    /**
     * 根据岗位ID更新状态
     * 实现思路：
     * 1. 根据ID查询岗位
     * 2. 更新状态
     * 3. 保存更新
     */
    @Override
    public boolean updateStatusByPostId(Long id, BaseStatus status) {
        // 获取岗位信息
        SystemPost systemPost = this.getById(id);
        if (systemPost == null) {
            return false;
        }
        // 设置新状态
        systemPost.setStatus(status);
        // 更新
        return this.updateById(systemPost);
    }
}




